#include <stdio.h>
#include <stdlib.h>
#include <csp_spu.h>
#include <csp_debug.h>
#include "../ct.h"


int global_pid; 


int Run(){

	int pid = csp_pid();
	global_pid = csp_pid();

	int n __attribute__ ((aligned(16)));

	n = 0; // Initial value

	csp_channel in = 
		csp_create_channel(ANY2ONE_CHANNEL, A_CHANNEL, sizeof(int));

	csp_channel out0 = 
		csp_create_channel(ONE2ONE_CHANNEL, D_CHANNEL, sizeof(int));

	csp_channel out1 = 
		csp_create_channel(ONE2ONE_CHANNEL, B_CHANNEL, sizeof(int));

	while( 1 ){
		csp_channel_read(in, &n);

		/* We do this sequentially like in the occam-commstime 
		 * benchmark (it's done in parallel in the jcsp benchmark).*/
		csp_channel_write(out0, &n);
		csp_channel_write(out1, &n);
	}


	ASSERT( pid == csp_pid() );
	ASSERT( global_pid == csp_pid() );

	PRINTF_FOR_TESTING("%s terminating on spe #%i with pid %i\n",__FILE__ , csp_spe_id(), pid);

	PRINTF_FOR_TESTING("Nested task with pid=%i terminated with res=%i.\n", pid, res);

	return 0;
}
